package com.skyyan.netty.jjf.util;

public class OrderUtils {

    /**
     * 根据设备序列号获取 订单编号 为8字节BCD码
     * @param deviceSerialNoBytes 为设备序列号 占三个字节
     * @return
     * @throws Exception
     */
    public static byte[] genBcdOrderId(byte[] deviceSerialNoBytes) throws Exception{
        if(deviceSerialNoBytes==null||deviceSerialNoBytes.length<3){
            throw new Exception("设备序列号长度必须为3字节");
        }
        //订单号为 deviceSerialNoBytes 后2个字节 +年月日时分秒
        // 取后2个字节
        byte b1 = deviceSerialNoBytes[1]; // 倒数第二字节
        byte b2 = deviceSerialNoBytes[2]; // 最后一字节
        // 合并：2字节设备号 + 6字节时间BCD
        byte[] _orderId = new byte[8];
        _orderId[0] = b1;
        _orderId[1] = b2;
        String timeStr= JJFDateTimeUtils.getYYMMDDHHMMSS();
        byte[] orderId = new byte[8];
        byte[] timeBcd = BcdUtil.stringToBcd(timeStr,8); // 应该是6字节
        // 合并：2字节设备号 + 6字节时间BCD
        orderId[0] = b1;
        orderId[1] = b2;
        System.arraycopy(timeBcd, 0, orderId, 2, 6);
        return orderId;
    }

    public static String genOrderId(byte[] deviceSerialNoBytes) throws Exception{
        byte[] orderId = genBcdOrderId(deviceSerialNoBytes);
        return BcdUtil.bcdToString(orderId);
    }


    public static byte[] genBcdOrderId(String  orderId,int len) throws Exception{
        return  BcdUtil.stringToBcd(orderId,len);
    }
}
